iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0

今天來講解一個在程式的世界中,相當重要的觀念,叫做遞迴。

在數學或是電腦科學領域中,遞迴都是一個非常重要的概念,簡單來說,遞迴就是用自己來定義自己。

數學上的遞迴
數學上常使用遞迴來定義數列。例如常見的費波那契數列:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89....

如果我們把數字一個一個列出來是相當花時間的,所以在數學上,我們可以以遞迴來定義:

https://ithelp.ithome.com.tw/upload/images/20201007/20128925vQNMAWxc7t.png
依照這個定義,雖然我們不能直接知道第n項的值,但卻可以依照先
前的數字一個一個繼續往下寫。

程式上的遞迴

在程式語言的世界中,遞迴又是怎麼一回事呢?簡單來說,就是一 個函數在定義中呼叫自己。 在函數中呼叫自己,就是遞迴函數:

int func(int n){
  return func(n-1)
}

我們來看看 func 這個函數在做什麼事,它只做一件事,就是回傳 func(n-1)。 仔細拆解來看,那 func(n-1) 又在做什麼呢?它只做一件事,就是回傳 func(n-2)。 那func(n-2)又在做什麼呢?它同樣只做一件事,就是回傳 func(n-3)。

但有沒有發現一件是呢,就是根本沒完沒了的一直算下去了,所以在遞迴程式中,最重要的事是要設定初始即終止條件。

int func(int n){
  if(n==1){
    return 1;
  }
  else{
    return func(n-1)
  }
}

當程式運算至func(1)就會回傳1,而不會再呼叫自身繼續運算下去了。

以上就是今天的主題,以Java演示了遞迴的概念。


Hi, I am Grant.

個人部落格 - https://grantliblog.wordpress.com/
個人網站 - https://grantli-website.netlify.app/#/mainpage
我的寫作專題 - https://vocus.cc/user/5af2e9b5fd89780001822db4#


上一篇
Day23 - 深入探討框架 - 以Spring為例
下一篇
Day25 - 演算法與複雜度
系列文
30天手把手帶你跟JAVA變成好朋友 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言